package com.example.chapter12;


import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/*
* 12.2.2.流中间操作
* */
public class Demo02 {

    public static void main(String[] args) {
        //map：将流中的每个元素映射为另一个对象。
        List<String> list = Arrays.asList("1", "2", "3");
        Stream<Integer> intStream = list.stream().map(Integer::parseInt);
        System.out.println(intStream);

        //filter：过滤流中的元素，只保留满足特定条件的元素。
        List<String> list2 = Arrays.asList("apple", "banana", "cherry");
        Stream<String> filteredStream = list2.stream().filter(s -> s.startsWith("a"));
        System.out.println(filteredStream);

        //flatMap：将流中的每个元素映射为一个流，然后将这些流连接成一个流。
        List<List<Integer>> listOfLists = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4));
        Stream<Integer> flatStream = listOfLists.stream().flatMap(List::stream);
        System.out.println(flatStream);

        //sorted：对流中的元素进行排序。
        List<String> list3 = Arrays.asList("banana", "apple", "cherry");
        Stream<String> sortedStream = list3.stream().sorted();
        System.out.println(sortedStream);

        //5.limit：限制流中元素的数量。
        List<Integer> list4 = Arrays.asList(1, 2, 3, 4, 5);
        Stream<Integer> limitedStream = list4.stream().limit(3);
        System.out.println(limitedStream);

        //skip：跳过流中的前N个元素。
        List<Integer> list5 = Arrays.asList(1, 2, 3, 4, 5);
        Stream<Integer> skippedStream = list5.stream().skip(2);
        System.out.println(skippedStream);


        //distinct：去除流中的重复元素。
        List<Integer> list6 = Arrays.asList(1, 2, 2, 3, 3, 3);
        Stream<Integer> distinctStream = list6.stream().distinct();
        System.out.println(distinctStream);

        //peek：查看流中的元素，主要用于调试目的，它不会改变流的内容。
        List<String> list7 = Arrays.asList("a", "b", "c");
        list7.stream().peek(s -> System.out.println(s)).forEach(s -> {});
        System.out.println(list7);

    }
}
